package com.net.xpay.openapi.limiter;

import com.google.common.util.concurrent.RateLimiter;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class ApiLimiter {


    private static final Map<String/*appkey*/, RateLimiter> rateLimiterMap = new ConcurrentHashMap<>();

    public synchronized static RateLimiter getRateLimiter(String appkey) {
        if (rateLimiterMap.get(appkey) != null) {
            return rateLimiterMap.get(appkey);
        }
        RateLimiter rateLimiter = RateLimiter.create(1);
        rateLimiterMap.put(appkey, rateLimiter);
        return rateLimiter;
    }

//    public static void main(String[] args) {
//
//        Thread t1 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    try {
//                        Thread.sleep(10000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    if (!getRateLimiter("1").tryAcquire()) {
//                        System.out.println("没有抢到锁");
//                    } else {
//                        System.out.println(Thread.currentThread().getName() + "：ok");
//                    }
//
//                }
//
//            }
//        };
//        Thread t2 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    try {
//                        Thread.sleep(10000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    if (!getRateLimiter("1").tryAcquire()) {
//                        System.out.println("没有抢到锁");
//                    } else {
//                        System.out.println(Thread.currentThread().getName() + "：ok");
//                    }
//                }
//
//            }
//        };
//
//        Thread t3 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    try {
//                        Thread.sleep(10000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    if (!getRateLimiter("1").tryAcquire()) {
//                        System.out.println("没有抢到锁");
//                    } else {
//                        System.out.println(Thread.currentThread().getName() + "：ok");
//                    }
//                }
//
//            }
//        };
//
//        Thread t4 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    try {
//                        Thread.sleep(10000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    if (!getRateLimiter("1").tryAcquire()) {
//                        System.out.println("没有抢到锁");
//                    } else {
//                        System.out.println(Thread.currentThread().getName() + "：ok");
//                    }
//                }
//
//            }
//        };
//
//        Thread t5 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    try {
//                        Thread.sleep(10000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    if (!getRateLimiter("1").tryAcquire()) {
//                        System.out.println("没有抢到锁");
//                    } else {
//                        System.out.println(Thread.currentThread().getName() + "：ok");
//                    }
//                }
//
//            }
//        };
//
//        t1.start();
//        t2.start();
//        t3.start();
//        t4.start();
//        t5.start();
//
//    }
}
